The present invention relates to the field of developing software applications that involve mathematical computations.
Many industries such as financial services, insurance, utilities, energy, research, industrials, etc. involve the use of mathematical computations in their operational activities. Applications that support these activities, therefore, need to support computational logic to perform these functions. Computational logic can be defined as a network of computational models linked in a logical manner. Here, a computational model signifies a mathematical expression.
In many instances, these computations need to be performed real-time to respond to a request from a prospect, for example, when a prospect requests a quote for insurance and thus requires that the computations be performed in a quick and efficient manner. Another example is when a potential customer applies for a credit card on a web site. Real time execution of requests of a large number of users (from a large number of access locations) is a challenging task. Simulation and solution of these real world problems require highly complex coding. Typically these applications are developed to cater to the specific needs like—credit assessment, insurance premiums, investment rating, market research, sales and operations. In some cases, these computational models represent the core of the company's offering. Therefore the speed with which new products can be introduced is largely dependent on the speed with which the required computational models can be implemented. This implies the need for flexibility in the way these models are implemented.
The conventional way to incorporate these computational models in applications comprises two stages. The first stage involves generation of a model and the second stage involves implementation of the generated model to carry out computations. The generation of models involves using a statistical or judgmental methodology to discern a pattern that best explains and predicts a phenomenon. For example, parametric statistical models like regression models are developed using statistical applications such as SAS based on a set of sample data. After the model is developed, the regression model is implemented to carry out the planned computations. The implementation stage involves implementing the regression model created in the generation stage. Implementation of the regression model includes creating a software application that is used in day-to-day operations to perform the computations.
A typical way of implementing these computational model based applications is to code the regression models. A conventional way to code the regression models is to go through a conventional software development lifecycle (SDLC) whether through a code generator or otherwise. The SDLC is illustrated in FIG. 1. As shown in FIG. 1, the Software Development life Cycle (SDLC) consists of various stages as an idea gets converted into a software application. At each stage, output from the previous stage is translated to serve the purpose of the current stage. In such a cycle, in most cases, unless one stage of the cycle is complete, next stage cannot be started. Also, with each translation, substantial effort is required to preserve full information and knowledge from the previous stage. Thus, a significant amount of overhead is created at each stage. As a result, traditional SDLC based development of software applications is cumbersome and time consuming.
Yet another problem faced with the code developed in the traditional manner is debugging. It is very expensive and time consuming to trace errors in a code that implements complex logic applications. Also, testing the code on the system incrementally is not possible in some cases. Testing the code is possible only when the entire code has been written. Such a limitation could make the code worthless after it is completely developed.
To overcome the abovementioned drawbacks, substantial efforts have been directed in making the SDLC effective, fast and predictable. These efforts can be classified in two broad categories—methodological approaches and automation approaches. The methodological approaches are aimed at improving the communication and translation between various stages of the lifecycle by standardizing them and reducing the redundancies across application development efforts. The automation approaches are aimed at automating one or more stages of the cycle.
The automation approaches are directed towards automating code generation and testing. Testing tools can reduce the physical testing efforts significantly. However, these tools are based on the creation of test cases. Thus, testing by these tools is a tedious and time-consuming task. Also, these testing tools are focused on reducing the effort in testing instead of eliminating the need for testing.
In the 1980s, efforts directed towards automated code generation and testing tools resulted in the emergence of Computer Aided Systems Engineering (CASE) tools. However, these tools were not successful as they were based on weak conceptual models.
Though application development technology has advanced considerably in terms of methodological approaches and automation approaches, it still faces a number of fundamental issues. These issues are related to time to market, availability of skilled resources, rapid changes in technology environments and heterogeneity.
Time to market is one of the most important issues. Earlier, it was common to put years in developing applications. However, such durations have now become unacceptable and put organizations at a serious disadvantage. The second issue with application development is the unavailability of trained resources (people). There is a general shortage of adequately trained resources and this greatly contributes to the delays and failures in application development. Moreover, development of computational model based applications requires special skill sets. In addition to knowledge of software programming, programmers are required to have skills related to mathematical models. Compounding this issue is the rapid obsolescence of skill sets with newer technologies. For example, a few years ago, C++ programmers were sought after and now they have to retool to be Java programmers. The third issue with application development relates to the heterogeneity of technologies. In the last two decades, there has been a dramatic increase in the rate at which new products and technologies have been introduced. This dramatic increase in new technologies has led to an increased heterogeneity. The heterogeneity in technology infrastructure is often a major issue in most corporations and often influences their purchasing decision in favor of one technology over another. Organizations have to balance a unified infrastructure with availability of the desired functionality on that infrastructure. The fourth issue with application development relates to modifying and scaling an installed computational model based application. Once an application is developed and installed, modifying the application is a complex task that requires a considerable amount of trained resources.
In addition to the abovementioned issues, there is another major issue that application development technologies have not addressed. Most approaches to application development are functionally oriented. Process, often thought of as workflow, is mistakenly viewed as distinct and separate from functions or tasks. For example, a computational model based application is viewed as a collection of distinct mathematical functions.
The abovementioned issues make the development of computational model based applications a tedious, expensive and time-consuming task.
The prior art products and patents mentioned below attempt to solve some of the problems, encountered in the traditional way of developing applications that implement computational logic.
One such product line is G_MATH and G_FFT for Delphi by Sigma Softwares located in Maryland, United States. G_MATH helps in creating interactive mathematical, financial, and scientific applications using pre-designed and crafted functions. G_FFT allows one to perform Fast Fourier Transform (FFT) and Inverse Fast Fourier Transform (IFFT). The user provides a problem description for a mathematical expression to the system in detail. The system includes an expression evaluator that supports variables and parameters. The expression evaluator assists in the execution of expressions.
Another product is Tau Generation2 Tools by Telelogic located in California, United States. Telelogic Tau Generation2 is a family of software development and testing tools. These tools support the software development lifecycle that includes system analysis, specification to real-time software design, implementation and testing. A model-driven software development is used in these tools. Tau Generation2 provides a visual modeling environment that allows engineers to specify system architecture, design and behavior using the industry standard visual development language, UML 2.0. System specifications and designs to be modeled are analyzed and verified at early stages of the SDLC.
U.S. Pat. No. 6,173,276, titled, “System And Method For Financial Instrument Modeling And Valuation” deals with similar issues. This patent is assigned to Scicomp, Inc. located in Texas, United States. This patent discloses a system and a method for application development for mathematical computations. The user provides a concise mathematical description of the problem to be solved in a problem specification language. The mathematical problem could involve a single mathematical expression or a complex combination of many mathematical expressions. Once the problem has been defined, a pseudo code is automatically generated by the system. Further, from the pseudo code a source code is automatically generated. This source code forms the entire software application for a mathematical problem.
All the patents and products mentioned above require the software developer to do some coding or involve the generation of code. They either require the application developer to write the code or they generate the code in specific language(s) using models that are created by the application developer. Models are created by the application developer in a specific language. None of these patents or products incorporates support for computational logic in applications without any code generation. Since, the end product is a code in a programming language, these environments still require substantial amount of programming skills and ongoing maintenance. In addition, any modification in a developed application requires a significant amount of time. Moreover, these solutions do not provide an easy means to visualize the logic and avoid the time and effort needed to internalize computational logic from the code. Also, these patents and products trace through the SDLC step by step to develop an application. As a result, these patents and products take a long time to develop applications.
Hence, there is a need for a system and method that addresses all the abovementioned issues.